package com.builder;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import com.model.Proveedor;
import com.view.ProveedorView;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class ProveedorBuilder extends BaseBuilder<ProveedorView, Proveedor> {

	@ManagedProperty("#{contactoBuilder}")
	private ContactoBuilder contactoBuilder;

	@ManagedProperty("#{direccionBuilder}")
	private DireccionBuilder direccionBuilder;

	@ManagedProperty("#{productoCodigoBuilder}")
	private ProductoCodigoBuilder productoCodigoBuilder;

	@Override
	public Proveedor toDomain(ProveedorView view) {
		return new Proveedor(view.getId(), view.getNombre(),
				view.getNombreFantasia(), view.getObservaciones(),
				contactoBuilder.toDomain(view.getListaContactos()),
				direccionBuilder.toDomain(view.getDireccion()), view.getDni(),
				view.getCuil(), view.getCuit(),
				view.getListaProductoCodigo() != null ? productoCodigoBuilder
						.toDomain(view.getListaProductoCodigo()) : null,
						view.getTipoProveedor());
	}

	@Override
	public ProveedorView toView(Proveedor model) {
		ProveedorView view;
		try {
			model.getListaProductoCodigo();
			view = new ProveedorView(
					model.getID(),
					model.getNombre(),
					model.getNombreFantasia(),
					model.getObservaciones(),
					contactoBuilder.toView(model.getListaContactos()),
					direccionBuilder.toView(model.getDireccion()),
					model.getDni(),
					model.getCuil(),
					model.getCuit(),
					model.getListaProductoCodigo() != null ? productoCodigoBuilder
							.toView(model.getListaProductoCodigo()) : null, model.getTipoProveedor());
		} catch (Throwable t) {
			view = new ProveedorView(model.getID(), model.getNombre(),
					model.getNombreFantasia(), model.getObservaciones(),
					contactoBuilder.toView(model.getListaContactos()),
					direccionBuilder.toView(model.getDireccion()),
					model.getDni(), model.getCuil(), model.getCuit(), null, model.getTipoProveedor());

		}

		return view;
	}

	public ContactoBuilder getContactoBuilder() {
		return contactoBuilder;
	}

	public void setContactoBuilder(ContactoBuilder contactoBuilder) {
		this.contactoBuilder = contactoBuilder;
	}

	public DireccionBuilder getDireccionBuilder() {
		return direccionBuilder;
	}

	public void setDireccionBuilder(DireccionBuilder direccionBuilder) {
		this.direccionBuilder = direccionBuilder;
	}

	public ProductoCodigoBuilder getProductoCodigoBuilder() {
		return productoCodigoBuilder;
	}

	public void setProductoCodigoBuilder(
			ProductoCodigoBuilder productoCodigoBuilder) {
		this.productoCodigoBuilder = productoCodigoBuilder;
	}

}
